package main

import "fmt"

func main() {

	//slice 又 叫动态数组
	//由 1、指向数组的指针
	//	 2、切片的长度size
	//	 3、容量
	//引用类型  长度可以改变

	var sa []int
	var a = [...]int{1, 3, 4}

	sa = a[:]
	fmt.Println(sa)
	fmt.Println(len(sa), cap(sa)) //默认切片的长度和容量和数组的 容量长度相同

	//扩容
	var sb = append(sa, 1)                       //这个地方需要新生成一个切片
	fmt.Println(len(sa), cap(sa), &a[1], &sa[1]) //3 3 0xc000016140 0xc000016140 切片元素的地址指向对应数组元素的地址
	fmt.Println(&sa)                             //&[1 3 4]???

	fmt.Println(len(sb), cap(sb)) //扩容后 4 6 容量是提升到以前的两倍

	var sc []int    //	一个空的slice
	fmt.Println(sc) //[]

	var sd = make([]int, 3, 3)
	fmt.Println(sd) //0xc000016138 这种方式能初始化一个切片为 [0 0 0]

}
